package com.tidu.template;

import com.tidu.strategy.sync.SyncStrategy;
import com.tidu.monitor.observer.ProgressObserver;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public abstract class AbstractDataSyncTemplate {
    protected SyncStrategy syncStrategy;
    private List<ProgressObserver> observers = new ArrayList<>();

    public AbstractDataSyncTemplate(SyncStrategy syncStrategy) {
        this.syncStrategy = syncStrategy;
    }

    // 添加观察者
    public void addObserver(ProgressObserver observer) {
        observers.add(observer);
    }

    // 移除观察者
    public void removeObserver(ProgressObserver observer) {
        observers.remove(observer);
    }

    // 通知所有观察者
    protected void notifyObservers() {
        new Thread(() -> {
            for (ProgressObserver observer : observers) {
                observer.update(syncStrategy.getProgress());
            }
        }).start();
    }

    // 模板方法
    public void execute() {
        while (!syncStrategy.isCompleted()) {
            List<Map<String, Object>> data = syncStrategy.fetchData();
            process(data);
            syncStrategy.writeData(data);
            notifyObservers(); // 通知观察者
        }
    }

    protected void process(List<Map<String, Object>> data) {
        // 可以做数据转换或过滤
    }
}
